#include <iostream>

/**
 * 解决名称冲突
       返回对象本身用*this
 */
class Person3 {
public:
    int age; // 非静态成员变量 属于类的对象上

    /**
     * 多个实例对象， 非静态成员的方法，只会诞生一份实例，也就是说多个同类型的对象会共用一块代码
     */
    Person3(int age) {
        std::cout << this << std::endl;
        this->age = age;
    }

    Person3 &personAddAge(Person3 &p) {
        this->age += p.age;
        // this指向是指针，而*this指向的就是这个对象本体，返回值要带&
        return *this;
    }

    void showMethod() {
        std::cout << this->age << std::endl;
    }
};

void test03() {
    Person3 *p3 = NULL; // 空指针
    p3->showMethod();
}

void test01() {
    Person3 p1(18);

    Person3 *p4 = new Person3(18);

    std::cout << p4->age << std::endl;
    std::cout << p1.age << std::endl;
    std::cout << &p1 << std::endl;
    std::cout << &p4 << std::endl;
}

void test02() {
    Person3 p1(10);
    Person3 p2(10);

    // 链式编程
    p2.personAddAge(p1).personAddAge(p2);

    std::cout << "p2的年龄为:" << p2.age << std::endl;
}

int main() {

    test01();
    test02();
//    test03();

    return 0;
}

